/*
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: DeltaInfo.java,v 1.1 2006/05/06 09:00:14 ckaestne Exp $
*/
package com.sleepycat.je.tree;
import java.nio.ByteBuffer;
import com.sleepycat.je.log.LogException;
import com.sleepycat.je.log.LogReadable;
import com.sleepycat.je.log.LogUtils;
import com.sleepycat.je.log.LogWritable;
import com.sleepycat.je.utilint.DbLsn;
/**
* DeltaInfo holds the delta for one BIN entry in a partial BIN log entry.
* The data here is all that we need to update a BIN to its proper state.
*/
public class DeltaInfo implements LogWritable, LogReadable {
private byte[] key;
private long lsn;
private byte state;
DeltaInfo(byte[] key, long lsn, byte state) {
this.key = key;
this.lsn = lsn;
this.state = state;
}
/**
* For reading from the log only.
*/
DeltaInfo() {
lsn = DbLsn.NULL_LSN;
}
/*
* @see com.sleepycat.je.log.LogWritable#getLogSize()
*/
public int getLogSize() {
return
LogUtils.getByteArrayLogSize(key) +
LogUtils.getLongLogSize() + // LSN
1; // state
}
/*
* @see LogWritable#writeToLog(java.nio.ByteBuffer)
*/
public void writeToLog(ByteBuffer logBuffer) {
LogUtils.writeByteArray(logBuffer, key);
LogUtils.writeLong(logBuffer, lsn);
logBuffer.put(state);
}
/*
* @see com.sleepycat.je.log.LogReadable#readFromLog
* (java.nio.ByteBuffer)
*/
public void readFromLog(ByteBuffer itemBuffer, byte entryTypeVersion)
throws LogException {
key = LogUtils.readByteArray(itemBuffer);
lsn = LogUtils.readLong(itemBuffer);
state = itemBuffer.get();
}
/*
* @see LogReadable#dumpLog(java.lang.StringBuffer)
*/
public void dumpLog(StringBuffer sb, boolean verbose) {
sb.append(Key.dumpString(key, 0));
sb.append(DbLsn.toString(lsn));
IN.dumpDeletedState(sb, state);
}
/**
* @see LogReadable#logEntryIsTransactional
*/
public boolean logEntryIsTransactional() {
return false;
}
/**
* @see LogReadable#getTransactionId
*/
public long getTransactionId() {
return 0;
}
/**
* @return the Key.
*/
byte[] getKey() {
return key;
}
/**
* @return the state flags.
*/
byte getState() {
return state;
}
/**
* @return true if this is known to be deleted.
*/
boolean isKnownDeleted() {
return IN.isStateKnownDeleted(state);
}
/**
* @return the LSN.
*/
long getLsn() {
return lsn;
}
}